#include <iostream>
using std::cout;
using std::endl;
//模板可以解决需要编写一系列重载函数的问题
int add(int x, int y){
    return x + y;
}
long add(long x, long y){
    return x + y;
}
//=====================上述是之前使用重载函数/函数重载解决方案============
//模板的使用
//T就是一个类型，比如可以是int、double、long也可以是自定义的类型
//模板和上述函数之间的对应关系：T相当于上述的int、long
//t1 t2相当于上述函数中的x和y
//T此时是一个类型参数
template <class T>
T add(T t1, T t2){
    cout << "template" << endl;
    return t1 + t2;
}
void test(){
    double d1 = 10, d2 = 20;
    short s1 = 1, s2 = 3;
    //根据下面的调用情况，会自动生成
    //double add(double x, double y);
    //short add(short x, short y);
    //这两个函数称之为隐式实例化
    cout << add(d1, d2) << endl;
    cout << add(s1, s2) << endl;
    //下面的这两个函数称之为显示实例化
    //vector<int> number;
    cout << add<double>(d1, d2) << endl;
    cout << add<short>(s1, s2) << endl;
}

void test2(){
    short s1 = 3;
    int i1 = 10;
    cout << add(s1, i1) << endl;
}

int main()
{
    test2();
    return 0;
}

